﻿#define _CRT_SECURE_NO_WARNINGS 1

//教室外有N 棵树（树的编号从1∼N），根据不同的位置和树种，学校已经对其进行了多年的维护。
//因为树的排列成线性，且非常长，我们可以将它们看作一条直线给他们编号。
//由于已经维护了多年，每一个树都由学校的园艺人员进行了维护费用的统计。
//每棵树的前期维护费用各不相同，但是由于未来需要要打药，所以有些树木的维护费用太高的话，就要重新种植。
//由于维护费用也称区间分布，所以常常需要统一个区间里的树木的维护开销。
//现给定一个长度为N 的数组A 以及M 个查询，Ai表示第i 棵树到维护费用。
//对于每个查询包含一个区间，园艺人员想知道该区间内的树木维护的开销是多少。
//请你编写程序帮帮他！
//输入描述
//每组输入的第一行有两个整数N和M。
//N 代表马路的共计多少棵树，M 代表区间的数目，N 和M 之间用一个空格隔开。
//接下来的一行，包含N 个数A1,A2,⋯,AN，分别表示每棵树的维护费用，每个数之间用空格隔开。
//接下来的M 行每行包含两个不同的整数，用一个空格隔开，表示一个区域的起始点L 和终止点R 的坐标。
//输出描述
//输出包括M 行，每一行只包含一个整数，表示维护的开销。

#include<iostream>
#include<vector>

using namespace std;

int main()
{
	int n = 0, m = 0;
	cin >> n >> m;
	vector<int> a(n + 1), s(n + 1);
	vector<int> l(m), r(m);
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		s[i] = s[i - 1] + a[i];
	}
	for (int i = 0; i < m; i++)
	{
		cin >> l[i] >> r[i];
	}
	for (int i = 0; i < m; i++)
	{
		cout << s[r[i]] - s[l[i] - 1] << endl;
	}
	return 0;
}